package com.example.vote.flow.service;

import com.example.vote.flow.pojo.core.Principle;
import com.example.vote.flow.pojo.param.VoteOptionAddNewParam;
import com.example.vote.flow.pojo.param.VoteOptionUpdateParam;
import com.example.vote.flow.pojo.vo.VoteOptionFullVO;
import org.springframework.transaction.annotation.Transactional;

/**
 * 处理投票选项的接口
 */
@Transactional
public interface IVoteOptionService {

    /**
     * 添加新的投票选项
     *
     * @param param     投票选项的添加参数，包含需要添加的投票选项的信息
     * @param principle 当前操作的用户信息
     */
    void addNew(VoteOptionAddNewParam param, Principle principle);

    /**
     * 根据ID删除投票选项
     *
     * @param id        需要删除的投票选项的ID
     * @param principle 当前操作的用户信息
     */
    void deleteById(Long id, Principle principle);

    /**
     * 根据ID更新投票选项的信息
     *
     * @param id        需要更新的投票选项的ID
     * @param param     包含更新信息的投票选项参数
     * @param principle 当前操作的用户信息
     */
    void updateById(Long id, VoteOptionUpdateParam param, Principle principle);

    /**
     * 根据ID查询投票选项的详细信息
     *
     * @param id 需要查询的投票选项的ID
     * @return 投票选项详细信息的对象
     */
    VoteOptionFullVO selectFullInfoById(Long id);

}
